#!/bin/sh
#
# rc.initial
#
# part of pfSense (https://www.pfsense.org)
# Copyright (c) 2004-2013 BSD Perimeter
# Copyright (c) 2013-2016 Electric Sheep Fencing
# Copyright (c) 2014-2023 Rubicon Communications, LLC (Netgate)
# All rights reserved.
#
# originally based on m0n0wall (http://neon1.net/m0n0wall)
# Copyright (c) 2003-2004 Manuel Kasper <mk@neon1.net>.
# All rights reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# make sure the user can't kill us by pressing Ctrl-C, ctrl-z, etc.
trap : INT
trap : QUIT
trap : ILL

unset do_sleep
if [ -f /etc/rc.local ]; then
	if ! /bin/pgrep -qf 'rc.local$'; then
		echo ">>> Launching rc.local in background..."
		/bin/sh /etc/rc.local &
		do_sleep=1
	fi
	if [ -f /etc/rc.local.running ] &&
	! /bin/pgrep -qf 'rc.local.running$'; then
		[ -n "${do_sleep}" ] && sleep 1
		echo ">>> Launching rc.local.running in background..."
		/bin/sh /etc/rc.local.running &
	fi
fi

# Parse command line parameters
while [ $# -gt 0 ]; do
	case $1 in
		-c)
			shift
			/bin/sh -c "$@"
			exit
			;;
		*) : ;;
	esac
	shift
done

# endless loop
while : ; do

if [ -f /tmp/ttybug ]; then
	/bin/rm /tmp/ttybug
	exit && exit && logout
fi

/etc/rc.banner

# Read product_name from $g, defaults to pfSense
product_name=$(/usr/local/sbin/read_global_var product_name pfSense)
product_label=$(/usr/local/sbin/read_global_var product_label pfSense)

# Check to see if SSH is running.
if /bin/pgrep -qaF /var/run/sshd.pid sshd 2>/dev/null; then
	sshd_option='Disable'
else
	sshd_option='Enable'
fi

# display console menu
echo ""
echo " 0) Logout (SSH only)                  9) pfTop"
echo " 1) Assign Interfaces                 10) Filter Logs"
echo " 2) Set interface(s) IP address       11) Restart webConfigurator"
echo " 3) Reset webConfigurator password    12) PHP shell + ${product_label} tools"
echo " 4) Reset to factory defaults         13) Update from console"
echo " 5) Reboot system                     14) ${sshd_option} Secure Shell (sshd)"
echo " 6) Halt system                       15) Restore recent configuration"
echo " 7) Ping host                         16) Restart PHP-FPM"
echo " 8) Shell"

echo
read -p "Enter an option: " opmode
echo

# see what the user has chosen
case ${opmode} in
0)
	exit && exit && logout
	;;
1)
	/etc/rc.initial.setports
	;;
2)
	/etc/rc.initial.setlanip
	;;
3)
	/etc/rc.initial.password
	;;
4)
	/etc/rc.initial.defaults
	;;
5)
	/etc/rc.initial.reboot
	;;
6)
	/etc/rc.initial.halt
	;;
7)
	/etc/rc.initial.ping
	;;
8)
	/bin/tcsh
	;;
9)
	/usr/local/sbin/pftop
	;;
10)
	/usr/bin/tail -F /var/log/filter.log
	;;
11)
	/etc/rc.restart_webgui
	;;
12)
	/usr/local/sbin/pfSsh.php
	;;
13)
	/bin/sh /usr/local/sbin/${product_name}-upgrade
	;;
14)
	/usr/local/bin/php -f /etc/rc.initial.toggle_sshd
	;;
15)
	/etc/rc.restore_config_backup
	;;
16)
	/etc/rc.php-fpm_restart
	;;
100)
	protocol=$(/usr/local/sbin/read_xml_tag.sh string system/webgui/protocol)
	port=$(/usr/local/sbin/read_xml_tag.sh string system/webgui/port)
	[ -z "$protocol" ] && protocol='http'
	if [ -z "$port" ]; then
		case $protocol in
			https) port=443;;
			*)     port=80;;
		esac
	fi
	links "${protocol}://localhost:${port}"
	;;
'')
	if [ -n "$SSH_CONNECTION" ]; then
		exit
	else
		/bin/kill $PPID ; exit
	fi
	;;
esac

done
